Published 2022-06-11
Postgresql - INNER JOIN
在关系数据库中,数据通常分布在多个表中,要选择完整的数据,通常需要从多个表中选择数据。
使用INNER JOIN
组合来自多个表的数据。
语法
SELECT
pka,
c1,
pkb,
c2
FROM
A
INNER JOIN B ON pka = fka;
- 首先指定要选择的列
- 指定要选择的表为主表
- 指定要选择的表为从表,然后使用
INNER JOIN
连接主表和从表
对于表中的每一行A
,INNER JOIN
将pka
列中的值与表中每一行的fka
列中的值进行比较B
:
- 如果想到,则将两个表中的相同的值连接起来添加到结果集中
- 如果没有相同的值,则忽略
示例
示例数据库
使用INNER JOIN
连接两个表
在这些表中,每当客户付款时,都会在表中插入一个新的payment
,而客户可能有零次或多次付款。通过customer_id
建立两个表关系。
SELECT
customer.customer_id,
first_name,
last_name,
amount,
payment_date
FROM
customer
INNER JOIN payment
ON payment.customer_id = customer.customer_id
ORDER BY payment_date;
SELECT
customer_id,
first_name,
last_name,
amount,
payment_date
FROM
customer
INNER JOIN payment USING(customer_id)
ORDER BY payment_date;
使用INNER JOIN
连接多个表
下图说明了三个表之间的关系:staff
、payment
和customer
- 每个员工处理 0 或多个付款,每个付款只能被一个员工处理
- 每个客户进行 0 或多次付款,每次付款只能被一个客户支付
SELECT
c.customer_id,
c.first_name customer_first_name,
c.last_name customer_last_name,
s.first_name staff_first_name,
s.last_name staff_last_name,
amount,
payment_date
FROM
customer c
INNER JOIN payment p
ON p.customer_id = c.customer_id
INNER JOIN staff s
ON p.staff_id = s.staff_id
ORDER BY payment_date;
Comments
No Comments!